package br.com.ds3.model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

@Entity(name = "EVENTO")
@SequenceGenerator(sequenceName = "SEQEVENTO", name = "SEQEVENTO", allocationSize=1, initialValue = 1)
public class Evento extends GenericModel {
	
	@Id
	@Column(name = "IDEVENTO")
	@GeneratedValue(generator = "SEQEVENTO", strategy = GenerationType.SEQUENCE)	
	private Long id;
	
	@Column(name = "NOME", length = 50, nullable = false)
	private String nome;
	
	@Column(name = "DESCRICAO", length = 200, nullable = false)	
	private String descricao;
	
	@Column(name = "ENDERECO", length = 100, nullable = false)		
	private String endereco;
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "evento")	
	private List<Atividade> atividades;
	
	@ManyToMany( targetEntity=Usuario.class, cascade={CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinTable( name="EVENTO_USUARIO",  
				joinColumns=@JoinColumn(name="IDEVENTO"),  
				inverseJoinColumns=@JoinColumn(name="IDUSUARIO") )  	
	private List<Usuario> usuarios;
	
	@ManyToMany( targetEntity=Grupo.class, cascade={CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinTable( name="EVENTO_GRUPO",  
				joinColumns=@JoinColumn(name="IDEVENTO"),  
				inverseJoinColumns=@JoinColumn(name="IDGRUPO") )  	
	private List<Grupo> grupos;	
	
	@Override
	public Long getId() {	
		return id;
	}

	@Override
	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public List<Grupo> getGrupo() {
		return grupos;
	}

	public void setGrupo(List<Grupo> grupo) {
		this.grupos = grupo;
	}

	public List<Atividade> getAtividades() {
		return atividades;
	}

	public void setAtividades(List<Atividade> atividades) {
		this.atividades = atividades;
	}
		
}
